function [fit,result]=aimFcn_1(x,option,data)
global data
path1=[]; %用于存储路径总信息
for noP=1:length(data.Path(:,1))-1 %遍历路径中的每一段
    path{noP}=[]; %空的单元数组用于存储每一段路径的详细信息
    S=data.Path(noP,:);%获取起点坐标
    E=data.Path(noP+1,:);%获取终点坐标
    % 在data.node中找到对应的起点和终点坐标对应的索引
    noE=find(data.node(:,1)==E(1) & data.node(:,2)==E(2));%data.node中找到终点对应的索引
    noS=find(data.node(:,1)==S(1) & data.node(:,2)==S(2));%找到起点对应的索引
    flag=zeros(data.numNode,1);%创建一个大小为自由栅格数（节点数）的零向量
    flag(noS)=1;%起点标记为已访问
    path{noP}=[noS,S,0,0];%起点信息添加到路径数组
    
    %初始化路径长度？？
    path0=[noS,S,0,0];
    pn=0;
    
    while sum(S==E)~=2 %只要当前位置没达到终点
        noS=find(data.node(:,1)==S(1) & data.node(:,2)==S(2));  %找到当前位置在节点矩阵中的索引
        % data.net为n行三列矩阵，第一列表示起点坐标索引，第二列表示终点坐标索引，第三列表示这两个点之间的距离
        position=find(data.net(:,1)==noS );  % 向量，表示在net中找到起点索引 positon中的元素是data.net中的行索引
        %找到起点附近有哪些自由栅格
        nextN=data.net(position,2); %向量，找到起点栅格连接的自由栅格索引，连接是因为net定义时候筛选的距离是根号二，nextN中的元素使node中相邻栅格的索引
        
        index=[];% 空向量用于存储已访问的相邻自由栅格索引
        for i=1:length(nextN)  %用于在nextN中找到已被标记为已访问的自由栅格索引，并存储在index中
            if flag(nextN(i))==1
                index=[index,i];% 将已被访问自由栅格在nextN中的索引i添加到index末尾
            end
        end
        nextN(index)=[];% 删除索引为index的元素
        position(index)=[];% 删除已访问的起点索引
        if isempty(nextN) %检查是否还有未访问的相邻自由栅格，如果是TRUE说明没有未访问栅格，需要回溯
            path{noP}(end,:)=[]; %删除路径中最后一个节点信息，因为无法延伸路径
            noS=path{noP}(end,1);%更新当前节点索引为路径倒数第二个节点索引
            S=path{noP}(end,2:3);%更新当前节点坐标为倒数第二个节点坐标
            pn=0;%将路径长度设为一个较大值，表示该路径无法到达终点
            continue;
        end
        D=data.net(position,3); %取出起点自由栅格连接的相邻自由栅格之间的距离
        D1=data.D(nextN,noE); %取出相邻自由栅格到终点自由栅格的距离
        D2=D+D1;%计算起点自由栅格经过相邻自由栅格到达终点自由栅格的距离
        
        % 将x中选取的自由栅格和路径规划的栅格进行归一化优先级判定
        pri=x(nextN); %x是什么？？从优先级向量x中取出相邻自由栅格的优先级
        temp1=myMapminmax(D2); % 对D2进行归一化处理
        temp2=myMapminmax(pri); %优先级归一化
        temp=temp1+temp2'; % 归一化后的距离和优先级相加得到临时向量temp
        [~,no]=min(temp); % 找到temp向量中的最小值及其索引，但只返回了索引存储在no标量
        noS=nextN(no); % 根据最小值索引no找到nextN中的相邻自由栅格索引作为下一个noS
        S=data.node(noS,:);% 获取下一个起点坐标
        flag(noS)=1; %将其设为已访问
        path{noP}=[path{noP};noS,S,D(no),D1(no)]; %将当前自由栅格索引、坐标、到达该栅格的距离和到终点距离添加到临时路径path
        path0=[path0;noS,S,D(no),D1(no)]; %将当前自由栅格索引、坐标、到达该栅格的距离和到终点距离添加到临时路径path0
    end
    
    %？？将当前路径长度pn存储在sumD向量中的位置noP
    sumD(noP)=pn;
    path1=[path1;path{noP}];% 将当前路径path{noP}添加到path1矩阵末尾，形成一条总路径
end
%%
if data.F==1
    route=path1(:,1);
    nowP=1;
    newRoute=[route(nowP),path1(nowP,2:3)];
    % figure
    % for i=1:length(data.B(:,1))
    %     x=data.B(i,1);
    %     y=data.B(i,2);
    %     rectangle('Position',[y-0.5,x-0.5,1,1],'FaceColor','k')
    % end
    % hold on
    while 1
        nowP_Index=route(nowP);
        x0=path1(nowP,2);
        y0=path1(nowP,3);
        nowP_XY=[x0,y0];
        %rectangle('Position',[y0-0.5,x0-0.5,1,1],'FaceColor','y')
        
        for nextP=length(route):-1:nowP+1
            flag=0;
            x1=path1(nextP,2);
            y1=path1(nextP,3);
            nextP_XY=[x1,y1];
            D=norm(nowP_XY-nextP_XY);
            for i=1:ceil(D*10)
                P0_XY=nowP_XY+i/ceil(D*10)*(nextP_XY-nowP_XY);
                P0_XY=round(P0_XY);
                path0=[nowP_XY;P0_XY];
                %plot(path0(:,2),path0(:,1),'-','LineWidth',2);
                %rectangle('Position',[P0_XY(2)-0.5,P0_XY(1)-0.5,1,1],'FaceColor','y')
                if data.map(P0_XY(1),P0_XY(2))==1
                    % rectangle('Position',[P0_XY(2)-0.5,P0_XY(1)-0.5,1,1],'FaceColor','g')
                    % drawnow
                    flag=1;
                    break;
                end
    
            end
            if flag==0
                break;
            end
        end
        if flag==0
            newRoute=[newRoute;route(nextP),path1(nextP,2:3)];
            nowP=nextP;
            if nowP==length(route)
                break;
            end
        else
            newRoute=[newRoute;route(nowP+1),path1(nowP+1,2:3)];
            nowP=nowP+1;
        end
        % hold on
        % plot(newRoute(:,3),newRoute(:,2),'-r','LineWidth',2)
        % grid on;
        % set(gca,'YDir','reverse')	% 翻转Y轴
        % %    axis([-1,mapSize(1),-1,mapSize(2)])
        % axis equal
    end
    path1=newRoute;
end
%%
D=0; %计算所有路径长度之和
for i=1:length(path1(:,1))-1 %遍历连接好的路径矩阵每一行，最后一行是终点不用遍历
   xy=path1(i,2:3); %提取路径中第i行节点坐标
   xy1=path1(i+1,2:3); %提取第i+1行节点坐标
   D=D+norm(xy-xy1); %计算xy到xy1之间的距离并添加到总长度D
end
fit=D+pn; %适应度fit等于总长度D+路径长度pn
if nargout>1
    result.fit=fit;
    result.path=path;
    result.path1=path1;
end
end